<?php
session_start();
require_once '../model/Autor.php';
class AutorDLO {

    private $autores;
    private static $autorDLO;

    private function __construct() {
    }

    /**
     * @method autorDLO getInstance() para obter uma única instância do controlador
     * @return AutorDLO
     */
    public static function getInstance() {
        if (!isset (self::$autorDLO)) {
            if (!isset ($_SESSION['autorDLO'])) {
                $_SESSION['autorDLO'] = serialize(new AutorDLO());
            }
            self::$autorDLO = unserialize($_SESSION['autorDLO']);
        }
        return self::$autorDLO;
    }

    public function cadastrar(&$assinatura, &$historico, &$nome) {
        $autor = new Autor();
        $autor->setAssinatura($assinatura);
        $autor->setHistorico($historico);
        $autor->setNome($nome);
        $autor->cadastrar();
    }

    public function listar() {
        $result = &Autor::listar();
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_autor'] = &$result[$i]->getCod_autor();
            $row['nome'] = &$result[$i]->getNome();
            $row['assinatura'] = &$result[$i]->getAssinatura();
            $row['historico'] = &$result[$i]->getHistorico();
            $resultado[$i] = &$row;
            unset ($row);
        }
        return $resultado;
    }

    public function excluir(&$cod_autor) {
        $autor = null;
        if (isset ($this->autores[$cod_autor])) {
            $autor = &$this->autores[$cod_autor];
        } else {
            $autor = &Autor::consultar($cod_autor);
            $this->autores[$cod_autor] = &$autor;
            $_SESSION['autorDLO'] = serialize($this);
        }
        if ($autor->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $autor->excluir();
        unset($this->autores[$cod_autor]);
        $_SESSION['autorDLO'] = serialize($this);
    }

    public function alterar(&$cod_autor, &$campo_id, &$campo_valor) {
        $autor = null;
        if (isset ($this->autores[$cod_autor])) {
            $autor = &$this->autores[$cod_autor];
        } else {
            $autor = &Autor::consultar($cod_autor);
            $this->autores[$cod_autor] = &$autor;
            $_SESSION['autorDLO'] = serialize($this);
        }
        if ($autor->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $autor->alterarCampo($campo_id, $campo_valor);
        $this->autores[$cod_autor] = &$autor;
        $_SESSION['autorDLO'] = serialize($this);
    }

    public function consultar(&$cod_autor) {
        $autor = null;
        if (isset ($this->autores[$cod_autor])) {
            $autor = &$this->autores[$cod_autor];
        } else {
            $autor = &Autor::consultar($cod_autor);
            $this->autores[$cod_autor] = &$autor;
            $_SESSION['autorDLO'] = serialize($this);
        }
        $row = array();
        $row['cod_autor'] = &$autor->getCod_autor();
        $row['nome'] = &$autor->getNome();
        $row['assinatura'] = &$autor->getAssinatura();
        $row['historico'] = &$autor->getHistorico();
        $row['vinculado'] = &$autor->isVinculado();
        return $row;
    }
}
?>